#include<stdio.h>
int N;		//N个皇后 
int queenPos[100];	// 皇后所摆位置，若第i个数为j，则表示第i个皇后摆在第i行第j列 
void Nqueen(int k)	//在前k-1行摆好的情况下，摆第k行及其后皇后，一行一个皇后 
{
	int i;
	if(k>N)	//N个皇后都摆好了 
	{
		for(i=1;i<=N;i++)	//输出N个皇后的摆放位置 
		{
			printf("%d ",queenPos[i]);
		}
		printf("\n");
		return ;
	} 
	for(i=1;i<=N;i++)	//将第k个皇后摆在第k行第i列 
	{
		int j;	//用来枚举前k-1行的皇后 
		for(j=1;j<k;j++)	//检查是否能与前k-1个皇后互相攻击 
		{
			if(i==queenPos[j]||i-queenPos[j]==k-j||i-queenPos[j]==j-k)
				break;	//能相互攻击则退出当前检测的循环，继续寻找合适的第k个皇后的位置 
		}
		if(j==k)	//当与前k-1个皇后不能互相攻击时 
		{
			queenPos[k]=i;	//将第k个皇后摆到第k行第i行 
			Nqueen(k+1);	//摆放下一个皇后 
		}
	}
}
int main()
{
	scanf("%d",&N); 
	Nqueen(1);	//摆放第i个皇后 
	return 0;
}
